"use strict";

var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");

var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));

/**
 * 文本复制(方法仅支持谷歌版本66以上)
 *
 * @since 1.1.0
 * @category 实用函数
 * @param {string} value 需要复制的文本字符串.
 *
 * @returns { Promise } Promise对象.
 *
 * @typedef {Promise} Promise对象
 * @property {boolean} status 复制是否成功
 * @example
 *
 * z.copyText('复制文本')
 * // { status: true, message:''}
 * // { status: false, message:'当前系统不支持复制'}
 *
 */
function copyText(value) {
  var rt = {
    status: false,
    message: ''
  };
  return new _promise.default(function (resolve, reject) {
    // 没有传入文本字符串
    if (!value) {
      rt.status = false;
      rt.message = '没有需要复制的文本字符串';
      reject(rt);
      return;
    }

    if (typeof value !== 'string') {
      rt.status = false;
      rt.message = '类型错误';
      reject(rt);
      return;
    } // 检查是否支持execCommand，如不支持则使用navigator.clipboard拷贝


    if (document.execCommand) {
      // 以下设置是为了限制用户恶意设置全局盒子模型样式
      var fakeElement = document.createElement('textarea'); // 防止在IOS上缩放

      fakeElement.style.fontSize = '12pt'; // 重写盒子模型

      fakeElement.style.border = '0';
      fakeElement.style.padding = '0';
      fakeElement.style.margin = '0'; // 设置绝对定位，将标签移动出屏幕外面

      fakeElement.style.position = 'absolute';
      fakeElement.style.right = '-9999px'; // 垂直移动到屏幕相同位置

      var yPosition = window.pageYOffset || document.documentElement.scrollTop;
      fakeElement.style.top = "".concat(yPosition, "px"); // 设置为可读

      fakeElement.setAttribute('readonly', ''); // 赋值

      fakeElement.value = value; // 添加到根节点

      document.body.appendChild(fakeElement); // 选中内容

      fakeElement.select();
      document.execCommand('copy');
      rt.status = true;
      resolve(rt); // 拷贝到剪切板之后，移除自身标签

      fakeElement.remove(); // navigator.clipboard对象只能在安全网络环境中才能使用(localhost或https)
    } else if (navigator.clipboard && window.isSecureContext) {
      // 采用navigator.clipboard拷贝
      navigator.clipboard.writeText(value).then(function () {
        rt.status = true;
        resolve(rt);
      }).catch(function () {
        rt.status = false;
        rt.message = '当前系统不支持复制';
        reject(rt);
      });
    } else {
      rt.status = false;
      rt.message = '当前系统或非环境(HTTPS)不支持复制';
      reject(rt);
    }
  });
}

module.exports = copyText;